perm filename CALBOX.FAI[CMS,LCS] blob
sn#471273 filedate 1979-09-04 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00013 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE TBOX
C00004 00003 Reset and interrupt vectors.
C00006 00004 INPUT WAIT. Check upflg time?
C00008 00005 CKSPD: CLRA SPD default.
C00011 00006 CKJSC: MOVRI K,JSC
C00013 00007 CKJP: SRB0 Select ram bank 0. Not active.
C00016 00008 Output Acc. to SI/O line
C00018 00009 GETMES: MOVRA I
C00020 00010 Bit spreading table
C00022 00011 Format calbox values.
C00024 00012 Alfa led message table.
C00027 00013 ("T"∧77)∨300 ↔ ("O"∧77)∨200 ↔ ("O"∧77)∨100 Too close.
C00030 ENDMK
C⊗;
TITLE TBOX
.INSERT MAC748.FAI[CMS,LCS]
;Ram bank 0 registers.
K ← 0
I ← 1
N ← 2
T ← 3 ;Timer overflow count.
CMD ← 4 ;TBOX and JS led bits.
CMD1 ← 5 ;Alfa led message index.
OFFL ← 6 ;Alfa off timer low.
OFFH ← 7 ;High.
;Ram10-27 = Stack.
;Ram bank 1 registers.
P ← 30 ;Pots pointer.
O ← 31 ;Offset pointer.
; X ← 32
Y ← 33
; Z ← 34
SW0 ← 35 ;TBOX switch bits.
SW1 ← 36
SW2 ← 37
;Standard ram.
SPD ← 40 ;Speed pot.
P0 ← 41 ;Joy stick pots.
P1 ← 42
P2 ← 43
P3 ← 44
JW0 ← 45 ;T. Joy stick switch channels.
JW1 ← 46 ;P/O.
JW2 ← 47 ;TOOL.
JW3 ← 50 ;T/JS/C.
OSPD ← 51 ;Old speed pot.
OP0 ← 52 ;Joy stick offsets.
OP1 ← 53
OP2 ← 54
OP3 ← 55
OJSW ← 56 ;Old joy stick switch bits.
OCMD ← 57 ;Old led bits.
OCMD1 ← 60 ;Old alfa led index.
JSC ← 61 ;Joy stick not calib. flag.
XTAL ← =6000000 ;In hertz.
BRATE ← =9600 ;Baud rate
;TBIT ← ((=10000000/BRATE)/((=10000000/XTAL)*=15))/2
TBIT ← =21
TT ← 1 ;Triple throw switch port.
S ← 2 ;Scan and A/D port.
PBL ← 4 ;Push button port low.
PBH ← 5 ;Push button port high.
CEW ← 6 ;Alfa led chip enables and write port.
JS ← 7 ;Joy stick, CU, and led latch port.
;Reset and interrupt vectors.
JMP RST ;RESET VECTOR
0
DISXI ;EXTERNAL INTERRUPT VECTOR
NOP
NOP
NOP
DISTI ;TIMER INT VECTOR
RETR
;Power on reset.
RST: CLRA ;0 For clear cursor memory.
OUTB ;Latch bus output.
MOVI 377 ;SETUP INPUT PORTS
OUTP TT ;SPTT switches.
MOVI 77 ;P4-7, SCAN, STRT, ALE.
OUTP S
;Setup PBSW ports for input.
MOVAX PBL ;PBSW low.
MOVAX PBH ;PBSW high.
;Clear cursor memory.
MOVI 170 ;7,,10.
MOVAX CEW ;Enable all alfa leds.
SWAP ;A ← 207.
MOVAX JS ;Clear JS and CU.
;Write all alfa leds.
ANPA CEW ;NOT W
CPLA
ORPA CEW ;W
SWAP ;A ← 10,,7.
ORPA CEW ;Disable all alfa leds.
SWAP ;A0-3 ← 10.
ORPA JS ;NOT CU.
CALL CLED ;Clear leds.
CALL CALED ;Clear alfa leds.
MOVAT ;Setup timer.
STRTT
CPLF1 ;Set alfa leds off.
MOVRI K,JSC
MOVMI K,4 ;Set joy stick not calib.
JMP SETFLG
; Set scan flag and timer
UPFLG: DJNZ T,CKIN
SETFLG: MOVRI T,4 ;4 = 82 ms.
CLRF0 ;Set scan flag
JF1S CKIN ;Check if alfa off.
DJNZ OFFL,CKIN ;OFFW ← OFFW - 1.
DJNZ OFFH,CKIN
CPLF1 ;Set alfa led off flag.
;INPUT WAIT. Check upflg time?
OFFSET ← TBIT/3 ;Center delay?
INWAI: JTF UPFLG ;Check if timer time out.
CKIN: JT0H INWAI ;Check for start bit.
MOVRI K,OFFSET-4 ;Center - Itime.
CENTER: DJNZ K,CENTER ;Wait for center of bit
JT0H INWAI ;Check if valid start bit
; Byte input routine
MOVRI N,11 ;# of bits -1
ILOOP: MOVRI K,TBIT-5;tBIT - tI
WAI: DJNZ K,WAI
CLRC
JT0H BITON
RORC
JMP BITOFF
BITON: CPLC
RORC
NOP
BITOFF: DJNZ N,ILOOP
ROLC ;Shift out stop bit
JCC INWAI ;Check for good stop bit.
JBS 7,BYTE1 ;Check if first or second byte.
MOVAR CMD ;Save first input byte.
JMP INWAI ;Get next byte.
BYTE1: MOVAR CMD1 ;Save second byte.
MOVRI K,JSC ;Point to calib flag.
JINT GETCB ;Check for calbox.
MOVMI K,4 ;JSC ← 1.
JMP CKSPD
;A/D convert routines.
GETCB: MOVMI K,0 ;JSC ← 0.
MOVI 1 ;Chanel 1.
OUTB ;Latch bus output.
ORPI S,200 ;ALE
ANPI S,177 ;NOT ALE.
MOVI 375 ;NOT CLR bit.
ANPA JS ;NOT CLR.
CPLA
ORPA JS ;CLR.
MOVRI P,P0 ;JS pot index.
MOVRI N,10 ;# of pots + switch channels.
ADLOOP: CALL CONVRT ;Wait for A/D.
MOVAM P ;Ram(p) ← Pots&sws(p).
MOVI 376
ANPA JS ;NOT CNT.
CPLA
ORPA JS ;CNT
INCR P ;Next pot.
DJNZ N,ADLOOP ;Next channel.
CKSPD: CLRA ;SPD default.
JT1H ADZRO ;Speed off.
;A/DCHAN ← SPEED.
OUTB ;Latch zero on bus.
ORPI S,200 ;ALE.
ANPI S,177 ;NOT ALE.
CALL CONVRT ;Wait for speed.
JNZ ADZRO ;Check if on and zero.
INCA ;A ← 1.
ADZRO: MOVRI K,SPD ;Save speed pot value.
MOVAM K
CALL CLED ;Clear cal. and mode leds.
MOVRA CMD ;Get mode code.
RORC ;Get cal. bit.
ANI 7 ;Zero data input to LS259.
CALL WLED ;Write mode led.
JCC CKSCAN ;No calib. bit.
CLRA ;Led 0.
CALL WLED ;Write cal. led.
;Check for scan flag.
CKSCAN: JF0S CALJMP ;If not time to scan then format calbox values.
JMP SCAN ;Scan switches.
CALJMP: JMP GETCAL ;Jump to format calbox.
CKJSC: MOVRI K,JSC
MOVMA K ;A ← JSC.
JBS 2,ZPOTS ;Check if calbox not calib.
JMP CKACT
ZPOTS: CLRA
MOVRI P,P0
MOVRI N,4 ;# of pots.
ZPL: MOVAM P ;Ram(Pots) ← 0.
INCR P
DJNZ N,ZPL
;Activity check.
CKACT: MOVRI K,OCMD
MOVMA K
XORR CMD ;A ← CMD .XOR. OCMD.
JNZ ACT
MOVRI K,OCMD1 ;Old alfa index.
MOVMA K
XORR CMD1
JNZ ACT
SRB1 ;Select ram bank 1.
MOVRA SW0
JNZ RACT
MOVRA SW1
JNZ RACT
MOVRA SW2
ANI 77 ;Mask out JS and P/O bits.
JNZ RACT
MOVRI P,SPD ;Now pot index.
MOVRI O,OSPD ;Old pot index.
MOVMA P ;Check speed.
XORM O
ANI 374 ;Stablize.
JZ CKJP
RACT: SRB0 ;Select ram bank 0.
ACT: JMP ACTIVE
CKJP: SRB0 ;Select ram bank 0. Not active.
CLRA ;Blank message index.
JF1S DPYJMP ;Check if alfa off.
JMP OBITS ;Not active.
DPYJMP: JMP ALFDPY ;Jump across page boundry.
UPRJMP: JMP UPPER ;Jump across page boundry.
FORJMP: JMP FORMT ;Jump across page boundry.
ACTIVE: MOVRA CMD ;OLD ← NEW.
MOVRI K,OCMD
MOVAM K ;OCMD.
MOVRA CMD1
INCR K
MOVAM K ;OCMD1.
MOVRI P,SPD
MOVRI O,OSPD
MOVMA P ;A ← SPD.
MOVAM O ;OSPD ← A.
CLRF1 ;Alfa led off flag ← 0.
MOVRI OFFH,10 ;OFFW ← tOWAIT.
MOVRA CMD1 ;Update alfa leds.
JBS 4,UPRJMP;Check if mess. index is greater that 15.
JBS 3,FORJMP;Check if not a limit stop.
ANI 7 ;Get joint number.
JZ DPYJMP ;Check if blank message.
MOVAR CMD1 ;Set limit stop flag.
;Page \/ boundry.
MOVI 1 ;Point A to limit stop message.
;Page /\ boundry.
FORMT: SWAP ;Shift etc.
ANI 360 ;For 16 messages.
ALFDPY: CALL OALFA ;Output message.
OBITS: MOVRI CMD1,0 ;Init check sum.
MOVRI I,SW0 ;Point to out bytes.
MOVRI CMD,11 ;# of output bytes.
OUTL: MOVMA I ;Get output byte.
CALL OBYTE
ADR CMD1 ;Add it to cksum.
MOVAR CMD1
INCR I
DJNZ CMD,OUTL
MOVRA CMD1
CPLA
INCA
CALL OBYTE ;Output check sum.
JMP INWAI ;Loop back to input wait.
UPPER: CPLA
ADDI 30 ;Subtract the upper index offset.
CPLA
JNZ FORMT ;Jump.
; Output Acc. to SI/O line
OBYTE: MOVRI K,11 ;# of bits -1
CLRC
ROLC ;Start bit
OLOOP: OUTP TT ;Output bit
RORC
MOVRI N,TBIT-3 ;TBIT - Itime.
OWAIT: DJNZ N,OWAIT
DJNZ K,OLOOP
ORPI TT,377 ;Stop bit.
MOVRI N,TBIT-10 ;TBIT - Itime.
SWAIT: DJNZ N,SWAIT
RORC
RET
WLED: OUTB ;Latch A on bus.
MOVI 7 ;NOT led E bit.
ANPA JS ;NOT E.
CPLA
ORPA JS ;E.
RET
;Clear leds
CLED: MOVRI N,370
MOVRA N ;Setup regs.
CLRL: CALL WLED ;Clear led loop.
INCR N ;Next led.
MOVRA N
JNZ CLRL
RET
;Convert channel and wait.
CONVRT: ORPI S,100 ;STRT.
ANPI S,277 ;NOT STRT.
MOVI =22 ;=172 micro seconds?
CONL: DECA ;Convert wait.
JNZ CONL
MOVXMA K ;Get A/D output.
MOVXMA K ;Twice for bus unlatch.
OUTB ;Latch bus for output.
RET
;Alfa led output routines.
CALED: CLRA ;Blank string index.
MOVRI CMD1,200;Clear limit stop message flag.
OALFA: MOVAR I ;Save string index.
MOVI 376 ;NOT CE0.
CENBL: MOVRI N,4 ;# of chrs in package.
MOVAR K ;Save CE.
MOVAX CEW ;NOT CE.
GETMES: MOVRA I
MOVP3 ;A ← String(chr).
OUTALF: OUTB ;Latch bus output.
MOVI 367
ANPA CEW ;NOT W.
CPLA
ORPA CEW ;W
INCR I ;CHR ← CHR+1.
DJNZ N,GETMES
MOVRA K
ROL ;Next CE.
JBS 3,CENBL
XCHR CMD1 ;Save last CE and reset limit stop flag.
JBS 7,CEOFF ;Return if not limit stop message.
ORI 60 ;Make joint number ascii.
MOVRI N,1
JNZ OUTALF ;Display the joint number.
CEOFF: MOVRA CMD1 ;Restore last CE.
ORPA CEW ;CE.
RET
; Bit spreading table
LOC 1000 ;1000 = Start of page two.
125 ↔ 124 ↔ 121 ↔ 120 ↔ 105 ↔ 104 ↔ 101 ↔ 100
25 ↔ 24 ↔ 21 ↔ 20 ↔ 5 ↔ 4 ↔ 1 ↔ 0
SBITS ← 60 ;Scan bits.
ROW0 ← 357 ;Scan row 0.
ROW1 ← 337 ;Scan row 1.
SCAN: SRB1 ;Select ram bank 1.
CPLF0 ;Reset scan flag.
ORPI S,SBITS ;Turn off rows
ANPI S,ROW0 ;Enable row 0.
INP TT ;Scan row 0
MOVAR SW0 ;Save it
ANI 17 ;Get low nibble
MOVPD ;Get bits from spread table
XCHR SW0
SWAP ;Swap high low nibbles
ANI 17 ;Get high nibble
MOVPD
MOVAR SW1
ORPI S,SBITS ;Turn off row 0.
ANPI S,ROW1 ;Enable row 1.
INP TT ;Scan row 1
ORPI S,SBITS ;Disable scan.
MOVAR SW2 ;Save row 1
ANI 17 ;Low nibble
MOVPD
ROL ;Shift + bits
ORR SW0 ;Or into - bits
ANI 374 ;Clear teach and off bits.
MOVAR SW0
MOVRA SW2 ;Get row 1 again
SWAP
ANI 17
MOVPD
ROL
ORR SW1
MOVAR SW1
MOVXA PBL ;Get push buttons.
MOVAR SW2 ;Save low nibble.
MOVXA PBH
SWAP ;High nibble.
ORR SW2
CPLA
MOVAR SW2
ANI 77 ;Zero JS and P/O bits.
XCHR SW2
ROLC ;Shift & swap teach & off bits
ROL
ROLC
ANI 3
ORR SW0
MOVAR SW0
JINT GETCAL ;Check if calbox.
SRB0 ;Select ram bank 0.
JMP ZPOTS ;No joy stick.
;Format calbox values.
GETCAL: SRB1 ;Select ram bank 1.
MOVRI P,P0 ;Point P to first calbox sign value.
MOVRI Y,0 ;Clear sign bits word.
MOVRI N,4
RCAL: MOVMA P ;A ← cal pot.
ROLC ;Get sign bit.
MOVRA Y
RORC
MOVAR Y ;Format sign bits.
INCR P ;P ← P + 2.
INCR P
DJNZ N,RCAL
MOVRI P,P1 ;Point P to first calbox pot value.
MOVRI O,P0 ;Point O to position in output string.
MOVRI N,4
CALMOV: MOVMA P ;Move calbox pot value from input string
MOVAM O ;to output string.
INCR P ;P ← P + 2.
INCR P
INCR O ;O ← O + 1.
DJNZ N,CALMOV
MOVRA Y
SWAP ;Put sign bits in low nibble of last byte in output string.
MOVAM O ;JW0 ← calbox sign bits.
SRB0 ;Select ram bank 0.
JMP CKJSC
;Alfa led message table.
LOC 1400 ;Start of page three.
(" "∧77)∨300 ↔ (" "∧77)∨200 ↔ (" "∧77)∨100 ;<Blank>.
" "∧77 ↔ (" "∧77)∨300 ↔ (" "∧77)∨200
(" "∧77)∨100 ↔ " "∧77 ↔ (" "∧77)∨300
(" "∧77)∨200 ↔ (" "∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("L"∧77)∨300 ↔ ("I"∧77)∨200 ↔ ("M"∧77)∨100 ;Limit stop.
"I"∧77 ↔ ("T"∧77)∨300 ↔ (" "∧77)∨200
("S"∧77)∨100 ↔ "T"∧77 ↔ ("O"∧77)∨300
("P"∧77)∨200 ↔ (" "∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("T"∧77)∨300 ↔ ("E"∧77)∨200 ↔ ("A"∧77)∨100 ;Teach mode C.
"C"∧77 ↔ ("H"∧77)∨300 ↔ (" "∧77)∨200
("M"∧77)∨100 ↔ "O"∧77 ↔ ("D"∧77)∨300
("E"∧77)∨200 ↔ (" "∧77)∨100 ↔ "C"∧77
0 ↔ 0 ↔ 0 ↔ 0
("C"∧77)∨300 ↔ ("O"∧77)∨200 ↔ ("M"∧77)∨100 ;Comp mode.
"P"∧77 ↔ (" "∧77)∨300 ↔ ("M"∧77)∨200
("O"∧77)∨100 ↔ "D"∧77 ↔ ("E"∧77)∨300
(" "∧77)∨200 ↔ (" "∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("X"∧77)∨300 ↔ ("X"∧77)∨200 ↔ ("X"∧77)∨100 ;Serial I/O error.
"X"∧77 ↔ ("X"∧77)∨300 ↔ ("X"∧77)∨200
("X"∧77)∨100 ↔ "X"∧77 ↔ ("X"∧77)∨300
("X"∧77)∨200 ↔ ("X"∧77)∨100 ↔ "X"∧77
0 ↔ 0 ↔ 0 ↔ 0
("X"∧77)∨300 ↔ ("X"∧77)∨200 ↔ ("X"∧77)∨100 ;Serial I/O error.
"X"∧77 ↔ ("X"∧77)∨300 ↔ ("X"∧77)∨200
("X"∧77)∨100 ↔ "X"∧77 ↔ ("X"∧77)∨300
("X"∧77)∨200 ↔ ("X"∧77)∨100 ↔ "X"∧77
0 ↔ 0 ↔ 0 ↔ 0
("X"∧77)∨300 ↔ ("X"∧77)∨200 ↔ ("X"∧77)∨100 ;Serial I/O error.
"X"∧77 ↔ ("X"∧77)∨300 ↔ ("X"∧77)∨200
("X"∧77)∨100 ↔ "X"∧77 ↔ ("X"∧77)∨300
("X"∧77)∨200 ↔ ("X"∧77)∨100 ↔ "X"∧77
0 ↔ 0 ↔ 0 ↔ 0
("X"∧77)∨300 ↔ ("X"∧77)∨200 ↔ ("X"∧77)∨100 ;Serial I/O error.
"X"∧77 ↔ ("X"∧77)∨300 ↔ ("X"∧77)∨200
("X"∧77)∨100 ↔ "X"∧77 ↔ ("X"∧77)∨300
("X"∧77)∨200 ↔ ("X"∧77)∨100 ↔ "X"∧77
0 ↔ 0 ↔ 0 ↔ 0
("T"∧77)∨300 ↔ ("O"∧77)∨200 ↔ ("O"∧77)∨100 ;Too close.
" "∧77 ↔ ("C"∧77)∨300 ↔ ("L"∧77)∨200
("O"∧77)∨100 ↔ "S"∧77 ↔ ("E"∧77)∨300
(" "∧77)∨200 ↔ (" "∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("T"∧77)∨300 ↔ ("O"∧77)∨200 ↔ ("O"∧77)∨100 ;Too far.
" "∧77 ↔ ("F"∧77)∨300 ↔ ("A"∧77)∨200
("R"∧77)∨100 ↔ " "∧77 ↔ (" "∧77)∨300
(" "∧77)∨200 ↔ (" "∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("T"∧77)∨300 ↔ ("E"∧77)∨200 ↔ ("A"∧77)∨100 ;Teach mode J.
"C"∧77 ↔ ("H"∧77)∨300 ↔ (" "∧77)∨200
("M"∧77)∨100 ↔ "O"∧77 ↔ ("D"∧77)∨300
("E"∧77)∨200 ↔ (" "∧77)∨100 ↔ "J"∧77
0 ↔ 0 ↔ 0 ↔ 0
("M"∧77)∨300 ↔ ("A"∧77)∨200 ↔ ("N"∧77)∨100 ;Manual mode.
"U"∧77 ↔ ("A"∧77)∨300 ↔ ("L"∧77)∨200
(" "∧77)∨100 ↔ "M"∧77 ↔ ("O"∧77)∨300
("D"∧77)∨200 ↔ ("E"∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("N"∧77)∨300 ↔ ("O"∧77)∨200 ↔ (" "∧77)∨100 ;No high pwr.
"H"∧77 ↔ ("I"∧77)∨300 ↔ ("G"∧77)∨200
("H"∧77)∨100 ↔ " "∧77 ↔ ("P"∧77)∨300
("W"∧77)∨200 ↔ ("R"∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("P"∧77)∨300 ↔ ("R"∧77)∨200 ↔ ("O"∧77)∨100 ;Prog running.
"G"∧77 ↔ (" "∧77)∨300 ↔ ("R"∧77)∨200
("U"∧77)∨100 ↔ "N"∧77 ↔ ("N"∧77)∨300
("I"∧77)∨200 ↔ ("N"∧77)∨100 ↔ "G"∧77
0 ↔ 0 ↔ 0 ↔ 0
("R"∧77)∨300 ↔ ("U"∧77)∨200 ↔ ("N"∧77)∨100 ;Run hold.
" "∧77 ↔ ("H"∧77)∨300 ↔ ("O"∧77)∨200
("L"∧77)∨100 ↔ "D"∧77 ↔ (" "∧77)∨300
(" "∧77)∨200 ↔ (" "∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
("F"∧77)∨300 ↔ ("A"∧77)∨200 ↔ ("T"∧77)∨100 ;Fatal error.
"A"∧77 ↔ ("L"∧77)∨300 ↔ (" "∧77)∨200
("E"∧77)∨100 ↔ "R"∧77 ↔ ("R"∧77)∨300
("O"∧77)∨200 ↔ ("R"∧77)∨100 ↔ " "∧77
0 ↔ 0 ↔ 0 ↔ 0
LOC 2272
0 ;This is for a block of zeros
END